package com.xiaoyung.easyisapisdk.common.base;

import java.io.Serializable;
import java.util.List;

import com.alibaba.fastjson2.JSON;
import com.fasterxml.jackson.annotation.JsonView;
//import io.swagger.annotations.ApiModelProperty;

/**
 * 表格分页数据对象
 * @param <T> 返回的数据类型
 */
public class RestTable<T> implements Serializable {
	
	private static final long serialVersionUID = 1L;

	@JsonView(GeneralViews.class)
	//@ApiModelProperty(value = "数据")
    private RowsData<T> data;
    
	@JsonView(GeneralViews.class)
    //@ApiModelProperty(value = "返回码")
    private Integer code;
    
    @JsonView(GeneralViews.class)
    //@ApiModelProperty(value = "消息")
    private String msg;

	/**
	 * 表格数据对象
	 */
	public RestTable() {
	}
	/**
	 * 初始化一个新创建的 RestTable 对象
	 * 
	 * @param code 状态码
	 * @param msg  返回消息
	 */
	public RestTable(int code, String msg) {
		this(code,msg,null);
	}

	/**
	 * 初始化一个新创建的 RestTable 对象
	 * 
	 * @param code 状态码
	 * @param msg  返回消息
	 * @param data 数据对象
	 */
	public RestTable(int code, String msg, List<T> data) {
		this.code = code;
		this.msg = msg;
		this.data = new RowsData<T>(data);
	}
	/**
	 * 分页
	 * 
	 * @param list  列表数据
	 * @param total 总记录数
	 */
	public RestTable(List<T> list, Long total) {
		this.data = new RowsData<T>(list,total);
	}

	public RowsData<T> getData() {
		return data;
	}
	public void setData(RowsData<T> data) {
		this.data = data;
	}
	public Integer getCode() {
		return code;
	}

	public void setCode(Integer code) {
		this.code = code;
	}

	public String getMsg() {
		return msg;
	}

	public void setMsg(String msg) {
		this.msg = msg;
	}
	
	/**
	 * 返回成功消息
	 * 
	 * @return 成功消息
	 */
	public static <R> RestTable<R> success() {
		return new RestTable<R>(HttpStatus.SUCCESS,"操作成功");
	}

	/**
	 * 返回成功数据
	 * 
	 * @return 成功消息
	 */
	public static <R> RestTable<R> success(List<R> data) {
		return new RestTable<R>(HttpStatus.SUCCESS,"操作成功",data);
	}

	/**
	 * 返回成功消息
	 * 
	 * @param msg 返回消息
	 * @return 成功消息
	 */
	public static <R> RestTable<R> success(String msg) {
		return new RestTable<R>(HttpStatus.SUCCESS,msg,null);
	}

	/**
	 * 返回成功消息
	 * 
	 * @param msg  返回消息
	 * @param data 数据对象
	 * @return 成功消息
	 */
	public static <R> RestTable<R> success(String msg, List<R> data) {
		return new RestTable<R>(HttpStatus.SUCCESS,msg,data);
	}

	/**
	 * 返回错误消息
	 * 
	 * @return
	 */
	public static <R> RestTable<R> error() {
		return new RestTable<R>(HttpStatus.ERROR,"操作失败",null);
	}

	/**
	 * 返回错误消息
	 * 
	 * @param msg 返回消息
	 * @return 警告消息
	 */
	public static <R> RestTable<R> error(String msg) {
		return new RestTable<R>(HttpStatus.ERROR,msg,null);
	}

	/**
	 * 返回错误消息
	 * 
	 * @param msg  返回消息
	 * @param data 数据对象
	 * @return 警告消息
	 */
	public static <R> RestTable<R> error(String msg, List<R> data) {
		return new RestTable<R>(HttpStatus.ERROR,msg,data);
	}

	/**
	 * 返回错误消息
	 * 
	 * @param code 状态码
	 * @param msg  返回消息
	 * @return 警告消息
	 */
	public static <R> RestTable<R> error(int code, String msg) {
		return new RestTable<R>(code,msg,null);
	}
	
	/*@SuppressWarnings({ "rawtypes", "unchecked" })
	public static <R> RestTable<R> rows(List<R> list) {
		RestTable<R> rspData = new RestTable<>();
		rspData.setCode(HttpStatus.SUCCESS);
		rspData.setData(new RowsData(list,new PageInfo(list).getTotal()));
		rspData.setMsg("查询成功");
		return rspData;
	}*/
	public String toString() {
		return this==null?null:JSON.toJSONString(this);
	}
}